#include <stdio.h>
#include <string.h>

int main(int argc, const char *argv[])
{
	// 想处理多个字符串  有两种方式
	// 方式1：可以使用二维数组处理
	char name1[4][64] = {"zhangsan",
						"lisi",
						"fulajimier.fulajimiluoweiqi.pujing",
						"zhaoliu"};
	printf("%s\n", name1[0]);
	printf("%s\n", name1[1]);
	printf("%s\n", name1[2]);
	printf("%s\n", name1[3]);
	// 这种处理方式会造成内存上的严重浪费 因为需要以最长的字符串为准
	printf("sizeof(name1) = %ld\n", sizeof(name1)); // 256
	// 这种写法 数组中的内容是可以修改的
	strcpy(name1[0], "zhangxiaoming");
	printf("%s\n", name1[0]);

	printf("--------------------------\n");
	// 方式2:使用指针数组来处理
	// 定义了一个指针数组 数组名叫name2 数组中共有4个元素
	// 每个元素都是一个 char * 类型的指针变量
	// 当取出数组中一个元素后 对其的操作 和操作单个指针变量是一模一样的
	char *name2[4] = {"zhangsan",
						"lisi",
						"fulajimier.fulajimiluoweiqi.pujing",
						"zhaoliu"};
	printf("%s\n", name2[0]);
	printf("%s\n", name2[1]);
	printf("%s\n", name2[2]);
	printf("%s\n", name2[3]);
	// 这种写法节约内存空间
	printf("sizeof(name2) = %ld\n", sizeof(name2)); // 4*sizeof(char *)
	// 但是每个指针都指向的是字符串常量区 字符串常量区内容不允许修改
	// strcpy(name2[0], "zhangxiaoming"); // 段错误
	
	// 下面的方式修改指针指向是可以的
	name2[0] = "zhangxiaoming";	// 指针可以改变指向
	printf("%s\n", name2[0]);

	return 0;
}
